<!DOCTYPE html>



  


<html class="theme-next pisces use-motion" lang="zh-Hans">
<head>
  <meta charset="UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/>
<meta name="theme-color" content="#222">
<meta name="referrer" content="same-origin">
<meta name="referrer" content="no-referrer" />








<meta http-equiv="Cache-Control" content="no-transform" />
<meta http-equiv="Cache-Control" content="no-siteapp" />
















  
  
  <link href="/lib/fancybox/source/jquery.fancybox.css?v=2.1.5" rel="stylesheet" type="text/css" />







<link href="/lib/font-awesome/css/font-awesome.min.css?v=4.6.2" rel="stylesheet" type="text/css" />

<link href="/css/main.css?v=5.1.4" rel="stylesheet" type="text/css" />


  <link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png?v=5.1.4">


  <link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32-next.png?v=5.1.4">


  <link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16-next.png?v=5.1.4">


  <link rel="mask-icon" href="/images/logo.svg?v=5.1.4" color="#222">





  <meta name="keywords" content="DDD," />










<meta name="description" content="&amp;emsp;&amp;emsp;前段时间一直在看领域驱动设计相关的文章，但是一直没有整理一些领域驱动的概念，导致一段时间过去就有点遗忘了，于是决定把一些领域驱动的概念先记录下来，便于下次翻阅。顺便再推荐推荐两本领域驱动相关比较推崇的书：《领域驱动设计软件核心复杂性应对之道》和《实现领域驱动设计》。前者是大名鼎鼎领域驱动设计之父Eric Evans的著作，这是一本2004年初版的书，至今已超过15年。不过相">
<meta name="keywords" content="DDD">
<meta property="og:type" content="article">
<meta property="og:title" content="领域驱动设计（DDD）笔记">
<meta property="og:url" content="http://yoursite.com/2020/12/05/领域驱动设计（DDD）笔记/index.html">
<meta property="og:site_name" content="矩阵编程">
<meta property="og:description" content="&amp;emsp;&amp;emsp;前段时间一直在看领域驱动设计相关的文章，但是一直没有整理一些领域驱动的概念，导致一段时间过去就有点遗忘了，于是决定把一些领域驱动的概念先记录下来，便于下次翻阅。顺便再推荐推荐两本领域驱动相关比较推崇的书：《领域驱动设计软件核心复杂性应对之道》和《实现领域驱动设计》。前者是大名鼎鼎领域驱动设计之父Eric Evans的著作，这是一本2004年初版的书，至今已超过15年。不过相">
<meta property="og:locale" content="zh-Hans">
<meta property="og:updated_time" content="2021-01-16T08:05:04.463Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="领域驱动设计（DDD）笔记">
<meta name="twitter:description" content="&amp;emsp;&amp;emsp;前段时间一直在看领域驱动设计相关的文章，但是一直没有整理一些领域驱动的概念，导致一段时间过去就有点遗忘了，于是决定把一些领域驱动的概念先记录下来，便于下次翻阅。顺便再推荐推荐两本领域驱动相关比较推崇的书：《领域驱动设计软件核心复杂性应对之道》和《实现领域驱动设计》。前者是大名鼎鼎领域驱动设计之父Eric Evans的著作，这是一本2004年初版的书，至今已超过15年。不过相">



<script type="text/javascript" id="hexo.configurations">
  var NexT = window.NexT || {};
  var CONFIG = {
    root: '/',
    scheme: 'Pisces',
    version: '5.1.4',
    sidebar: {"position":"left","display":"post","offset":12,"b2t":false,"scrollpercent":false,"onmobile":false},
    fancybox: true,
    tabs: true,
    motion: {"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideUpIn"}},
    duoshuo: {
      userId: '0',
      author: '博主'
    },
    algolia: {
      applicationID: '',
      apiKey: '',
      indexName: '',
      hits: {"per_page":10},
      labels: {"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}
    }
  };
</script>



  <link rel="canonical" href="http://yoursite.com/2020/12/05/领域驱动设计（DDD）笔记/"/>





  <title>领域驱动设计（DDD）笔记 | 矩阵编程</title>
  





  <script type="text/javascript">
    var _hmt = _hmt || [];
    (function() {
      var hm = document.createElement("script");
      hm.src = "https://hm.baidu.com/hm.js?7d29e6fba8e07d1a8af2414a20e5f2a6";
      var s = document.getElementsByTagName("script")[0];
      s.parentNode.insertBefore(hm, s);
    })();
  </script>




</head>

<body itemscope itemtype="http://schema.org/WebPage" lang="zh-Hans">

  
  
    
  

  <div class="container sidebar-position-left page-post-detail">
    <div class="headband"></div>

    <header id="header" class="header" itemscope itemtype="http://schema.org/WPHeader">
      <div class="header-inner"><div class="site-brand-wrapper">
  <div class="site-meta ">
    

    <div class="custom-logo-site-title">
      <a href="/"  class="brand" rel="start">
        <span class="logo-line-before"><i></i></span>
        <span class="site-title">矩阵编程</span>
        <span class="logo-line-after"><i></i></span>
      </a>
    </div>
      
        <p class="site-subtitle"></p>
      
  </div>

  <div class="site-nav-toggle">
    <button>
      <span class="btn-bar"></span>
      <span class="btn-bar"></span>
      <span class="btn-bar"></span>
    </button>
  </div>
</div>

<nav class="site-nav">
  

  
    <ul id="menu" class="menu">
      
        
        <li class="menu-item menu-item-主页">
          <a href="/" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-主页"></i> <br />
            
            主页
          </a>
        </li>
      
        
        <li class="menu-item menu-item-categories">
          <a href="/categories/" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-分类"></i> <br />
            
            分类
          </a>
        </li>
      
        
        <li class="menu-item menu-item-所有文章">
          <a href="/archives/" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-文章"></i> <br />
            
            所有文章
          </a>
        </li>
      

      
    </ul>
  

  
</nav>



 </div>
    </header>

    <main id="main" class="main">
      <div class="main-inner">
        <div class="content-wrap">
          <div id="content" class="content">
            

  <div id="posts" class="posts-expand">
    

  

  
  
  

  <article class="post post-type-normal" itemscope itemtype="http://schema.org/Article">
  
  
  
  <div class="post-block">
    <link itemprop="mainEntityOfPage" href="http://yoursite.com/2020/12/05/领域驱动设计（DDD）笔记/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="name" content="matrix">
      <meta itemprop="description" content="">
      <meta itemprop="image" content="/images/avatar.gif">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="矩阵编程">
    </span>

    
      <header class="post-header">

        
        
          <h1 class="post-title" itemprop="name headline">领域驱动设计（DDD）笔记</h1>
        

        <div class="post-meta">
          <span class="post-time">
            
              <span class="post-meta-item-icon">
                <i class="fa fa-calendar-o"></i>
              </span>
              
                <span class="post-meta-item-text">发表于</span>
              
              <time title="创建于" itemprop="dateCreated datePublished" datetime="2020-12-05T11:22:33+08:00">
                2020-12-05
              </time>
            

            

            
          </span>

          
            <span class="post-category" >
            
              <span class="post-meta-divider">|</span>
            
              <span class="post-meta-item-icon">
                <i class="fa fa-folder-o"></i>
              </span>
              
                <span class="post-meta-item-text">分类于</span>
              
              
                <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
                  <a href="/categories/DDD/" itemprop="url" rel="index">
                    <span itemprop="name">DDD</span>
                  </a>
                </span>

                
                
              
            </span>
          

          
            
              <span class="post-comments-count">
                <span class="post-meta-divider">|</span>
                <span class="post-meta-item-icon">
                  <i class="fa fa-comment-o"></i>
                </span>
                <a href="/2020/12/05/领域驱动设计（DDD）笔记/#comments" itemprop="discussionUrl">
                  <span class="post-comments-count disqus-comment-count"
                        data-disqus-identifier="2020/12/05/领域驱动设计（DDD）笔记/" itemprop="commentCount"></span>
                </a>
              </span>
            
          

          
          

          

          

          

        </div>
      </header>
    

    
    
    
    <div class="post-body" itemprop="articleBody">

      
      

      
        <p>&emsp;&emsp;前段时间一直在看领域驱动设计相关的文章，但是一直没有整理一些领域驱动的概念，导致一段时间过去就有点遗忘了，于是决定把一些领域驱动的概念先记录下来，便于下次翻阅。顺便再推荐推荐两本领域驱动相关比较推崇的书：《领域驱动设计软件核心复杂性应对之道》和《实现领域驱动设计》。前者是大名鼎鼎领域驱动设计之父Eric Evans的著作，这是一本2004年初版的书，至今已超过15年。不过相比于前者，我更喜欢《实现领域驱动设计》，因为感觉这本书的对一些术语的提炼以及整个章节叙述由广而深，显然更易于理解。当我初看完《领域驱动设计》这本书的时候其实是一头雾水，直到后面再看《实现领域驱动设计》时，才感觉懂了点门道。<br><a id="more"></a></p>
<h3 id="为什么是DDD"><a href="#为什么是DDD" class="headerlink" title="为什么是DDD"></a>为什么是DDD</h3><p>&emsp;&emsp;首先DDD不是一门什么新的技术或者思想，相比而言，DDD已经发展了十几年，但是DDD不仅没有被淘汰，反而越来越多地被提起。随着设备和技术不断推陈出新，软件架构模式也从单体到集中式、分布式、微服务的方向不断演进，随着微服务技术的发展和兴起，DDD的设计和领域建模的方式，开始大放异彩。需要明确，DDD不是架构，而是一种架构设计方法论，它通过边界划分将复杂业务领域简单化，帮我们设计出清晰的领域和应用边界，可以很容易地实现架构演进。</p>
<h3 id="战略设计"><a href="#战略设计" class="headerlink" title="战略设计"></a>战略设计</h3><p>&emsp;&emsp;战略设计颇有点高屋建瓴的味道，需要有广阔的视野，从宏观的角度对整个业务进行分析，建立业务模型，划分领域边界，构建出通用语言的限界上下文。它可以帮助我们定义不同团队之间的组织关系，清楚地区分不同系统和业务的关注点，这样可以保护每个业务层面的服务。更进一步，这将指导我们来拆分和实现上面所说的微服务。</p>
<blockquote>
<p>DDD的战略设计有点抽象，也有很大难度，因为这不是一门单纯的技术，更多的是每个人对业务的理解，当然也有一些技术手段辅助，比如可以通过事件风暴划分限界上下文。</p>
</blockquote>
<h5 id="领域"><a href="#领域" class="headerlink" title="领域"></a>领域</h5><p>领域按照维基百科的解释来说，是指某一专业或事物方面范围的涵盖。简单来说，当你在开发一款电商应用的时候，你所面对的就是电商这个领域。DDD使用领域来划定业务的边界，当然有时候一个复杂的业务又可以进行拆分，所以领域又可以按照一定的规则进行拆分，比如下面将要解释的核心域、子域、通用子域和支撑域，他们都是领域，但是同时又有不同的含义。因为DDD的领域模型不是建立一个单一、全功能式的模型，正好相反，在DDD中，一个领域被分为若干个子域，领域模型在限界上下文中完成开发。</p>
<h5 id="子域"><a href="#子域" class="headerlink" title="子域"></a>子域</h5><p>上面说领域是可以拆分的，几乎所有软件的领域都包含多个子域，而子域可以根据软件的业务系统功能进行拆分，比如典型的电商业务涉及订单、商品、库存和营销等子域。在领域细化为不同的子域，同时子域又根据自身业务的重要程度和功能属性划分为三种：核心域、通用子域和支撑域。</p>
<h5 id="核心域"><a href="#核心域" class="headerlink" title="核心域"></a>核心域</h5><p>核心域是一款软件的竞争力所在，是业务成功的主要促成因素。核心域的重要程度不言而喻，在DDD开发中，将重点关注核心域（从企业的战略角度分析）。</p>
<h5 id="支撑域"><a href="#支撑域" class="headerlink" title="支撑域"></a>支撑域</h5><p>支撑域是相较于核心域而言的，它们通常专注于业务的某一个方面，但却不是业务的核心。</p>
<h5 id="通用子域"><a href="#通用子域" class="headerlink" title="通用子域"></a>通用子域</h5><p>如果一个子域被用于多个业务系统，那么这个子域就是通用子域。当然并不是说支撑域和通用子域不重要，它们同样重要，这是相对于核心域而言重要程度没这么高。</p>
<h5 id="限界上下文"><a href="#限界上下文" class="headerlink" title="限界上下文"></a>限界上下文</h5><p>限界上下文主要用来封装通用语言和领域对象。它是一个显示的边界，领域模型便在于这个边界之内。为什么需要创建这样的一个边界？因为在很多情况下，不同的模型中存在名字相同或相近的对象，但是它们的意思却不同。当模型被一个显示的边界所包围，其中每个概念的含义就可以确定了。在微服务拆分中，理论上限界上下文就是微服务拆分的边界依据。</p>
<h3 id="战术设计"><a href="#战术设计" class="headerlink" title="战术设计"></a>战术设计</h3><p>&emsp;&emsp;战术设计主要是对战略设计的具体实践，战术设计依赖于上面说的战略设计，通过具体的技术将领域模型映射到代码中，它本身关注的更多是技术层方面的实施。</p>
<h5 id="实体和值对象"><a href="#实体和值对象" class="headerlink" title="实体和值对象"></a>实体和值对象</h5><p>实体和值对象都是领域的特定对象，可以说他们是领域模型的基本组成单元。实体和值对象的区别是实体拥有唯一标识，有状态，拥有自己的什么周期；值对象没有唯一标识，而且不可变。举个简单的例子，订单是一个实体，它包含订单ID、订单状态、订单的发货地址省市县等，订单的发货地址这时候就是一个值对象。</p>
<h5 id="聚合和聚合根"><a href="#聚合和聚合根" class="headerlink" title="聚合和聚合根"></a>聚合和聚合根</h5><p>实体和值对象，以及实体之间相互协作，形成复杂、错乱的关联关系，在执行业务操作的时候，面对如此多的领域对象，很难保证一致性。而使用聚合来组织这些领域对象，能够保证在它们协同工作的时候，保证数据的一致性。可以这么理解，聚合由一些实体和值对象组合而成，是数据修改和持久化的基本单位。那么聚合根是如何保证数据一致性的？答案是聚合根，如果说实体或者值对象是一个个体，聚合就是组织，而聚合根是组织的负责人。再尝试访问或者操作聚合的时候，需要先访问聚合根，然后由聚合根路由到内部实体，聚合外部对象不能不通过聚合根而直接访问聚合。既然所有操作都需要经过聚合根，那么任何一致性的保证也就简单多了。</p>
<h5 id="资源库"><a href="#资源库" class="headerlink" title="资源库"></a>资源库</h5><p>资源库表示一个安全的存储区域，通常提供存储和移除的功能，并且保证取出的物品和存入的物品保持相同的状态。我们将聚合实例放在资源库中，通过资源库持久化领域对象到数据库中。其实初看资源库和传统DAO层功能有些类似，但是它们是不同的：DAO面向数据库，提供CRUD功能；资源库面向对象集合，更贴近领域模型，只有聚合根才能操作。顺便再贴一个stackoverflow上关于DAO和Repository的探讨，方便后续翻阅：<a href="https://stackoverflow.com/questions/8550124/what-is-the-difference-between-dao-and-repository-patterns" target="_blank" rel="noopener">What is the difference between DAO and Repository patterns?</a>。</p>
<h5 id="领域事件"><a href="#领域事件" class="headerlink" title="领域事件"></a>领域事件</h5><p>领域事件是领域专家所关心的发生在领域中的一些事件。可能你在不知道DDD情况下，已经在运用领域事件了，比如当订单创建成功后，会发布一个订单创建成功的事件。领域事件的作用主要是：</p>
<ul>
<li>聚合间的一致性</li>
<li>限界上下文集成</li>
<li>事件溯源</li>
<li>批处理</li>
</ul>
<h5 id="DDD分层"><a href="#DDD分层" class="headerlink" title="DDD分层"></a>DDD分层</h5><p>在Web开发中经典的三层架构：展现层（view）、业务层（service）、数据访问层（dao），在此基础上，领域驱动提出了四层架构：<strong>用户接口层（interface）、应用层（application）、领域层（domain）、基础设施层（infrastructure）</strong>，下面简单说下：</p>
<ul>
<li><strong>用户接口层</strong> 负责向用户显示信息和解释用户指令，这里用户的范围是很广的，可以是界面、外部调用、脚本执行等。</li>
<li><strong>应用层</strong> 很薄的一层，理论上不应该有业务规则或逻辑，主要面向用例、流程、组合服务、事务、发送或订阅领域事件等相关的操作。</li>
<li><strong>领域层</strong> 实现企业核心业务逻辑，前面提及的实体、值对象、聚合根等归属于领域层。</li>
<li><strong>基础设施层</strong> 为其它各层提供通用的技术和基础服务，包括第三方工具、驱动、消息中间件、网关、文件、缓存以及数据库等。</li>
</ul>
<p>经典的分层架构一般都是上层依赖下层，但是按照依赖倒置原则来说：</p>
<blockquote>
<p><strong>高层模块不应该依赖于底层模块，两者都应该依赖于抽象</strong><br><strong>抽象不应该依赖于细节，细节应该依赖于抽象</strong></p>
</blockquote>
<p>按照这个定义，低层服务（基础层）应该依赖于高层组件（用户接口层、应用层、领域层）提供的接口。比如可以在领域层封装仓储接口，然后在基础层实现，这样领域层就不依赖具体的基础层模块，而是基础层依赖领域层，这样就避免仓储模块发生大改动会对核心领域层有大的影响。</p>
<h3 id="架构-amp-模式"><a href="#架构-amp-模式" class="headerlink" title="架构&amp;模式"></a>架构&amp;模式</h3><h5 id="CQRS"><a href="#CQRS" class="headerlink" title="CQRS"></a>CQRS</h5><p><strong>Command Query Responsibility Segregation</strong>——即命令查询分离。命令是会引起数据发生变化的操作，比如增删改这些操作；而查询不会对数据产生影响。CQRS的核心就是分离这两种操作，这里说的分离不仅仅是接口上的分离，更多的数据模型的分离。这和读写分离又有点不同，读写分离强调的是物理数据库的分离，CQRS强调的是command与query操作数据模型上的分离，比如command更注重范式、领域模型，而query则注重性能、可以允许更多冗余。</p>
<h5 id="事件溯源（Event-Sourcing）"><a href="#事件溯源（Event-Sourcing）" class="headerlink" title="事件溯源（Event Sourcing）"></a>事件溯源（Event Sourcing）</h5><p>Event Sourcing又叫事件溯源，事件作为系统的一等公民。简单地来说，它会将所有业务行为以 <strong>append-only</strong> 的形式存储起来，可以用于构建领域对象状态、保证事务数据一致性、支持完整的审计流程等。</p>
<h5 id="六边形架构（Hexagonal-Architecture）"><a href="#六边形架构（Hexagonal-Architecture）" class="headerlink" title="六边形架构（Hexagonal Architecture）"></a>六边形架构（Hexagonal Architecture）</h5><p>六边形架构又称<strong>端口和适配器模式</strong>，这个名字听上去更加契合，这里端口没有特定的含义，比如我们可以想象成HTTP，而适配器则是对应端口的处理方式，如Web请求中对应的Controller，六边形架构的核心理念是将输入和输出放在最外层，内层是核心业务层。这种理念其实和领域驱动设计非常接近，领域驱动设计中也有用依赖倒置的方式来解耦技术和业务系统的关联。利用六边形架构，可以让我们将应用程序的核心逻辑与外部的关注点隔离开来，可以轻松地变更数据传输方式、切换数据源或者接入多驱动测试。</p>
<h5 id="整洁架构（The-Clean-Architecture）"><a href="#整洁架构（The-Clean-Architecture）" class="headerlink" title="整洁架构（The Clean Architecture）"></a>整洁架构（The Clean Architecture）</h5><p>整洁架构感觉和六边形架构一脉相承，更多地是提炼了其他架构的一些特征精髓：</p>
<ul>
<li><strong>框架分离</strong> 业务不受框架的限制</li>
<li><strong>可测试性</strong> 业务逻辑独立测试，不依赖于UI、数据库、Web服务等其他外部条件</li>
<li><strong>独立于UI</strong> UI层的替换和修改不会修改其他系统模块</li>
<li><strong>独立于DB</strong> 数据库存储的独立、可替换性</li>
<li><strong>与外部结构分离</strong> 系统业务逻辑不需要知道任何外部结构<h3 id="Reference"><a href="#Reference" class="headerlink" title="Reference"></a>Reference</h3></li>
</ul>
<ol>
<li>《实现领域驱动设计》</li>
<li><a href="https://blog.jaggerwang.net/clean-architecture-in-practice/" target="_blank" rel="noopener">干净架构最佳实践</a></li>
<li><a href="https://github.com/twang281314/frontEnd/blob/master/weekly/resources/software_architecture.md" target="_blank" rel="noopener">Software Architecture Design</a></li>
<li><a href="https://www.infoq.cn/article/pjekymkzhmkafgi6ycri" target="_blank" rel="noopener">Netflix的六边形架构实践</a></li>
</ol>

      
    </div>
    
    
    

    

    

    

    <footer class="post-footer">
      
        <div class="post-tags">
          
            <a href="/tags/DDD/" rel="tag"># DDD</a>
          
        </div>
      

      
      
      

      
        <div class="post-nav">
          <div class="post-nav-next post-nav-item">
            
              <a href="/2020/12/03/记一次nacos刷新失败排查（二）/" rel="next" title="记一次nacos刷新失败排查（二）">
                <i class="fa fa-chevron-left"></i> 记一次nacos刷新失败排查（二）
              </a>
            
          </div>

          <span class="post-nav-divider"></span>

          <div class="post-nav-prev post-nav-item">
            
              <a href="/2020/12/11/Kafka之旅（一）Producer/" rel="prev" title="Kafka之旅（一）Producer">
                Kafka之旅（一）Producer <i class="fa fa-chevron-right"></i>
              </a>
            
          </div>
        </div>
      

      
      
    </footer>
  </div>
  
  
  
  </article>



    <div class="post-spread">
      
    </div>
  </div>


          </div>
          


          

  
    <div class="comments" id="comments">
      <div id="disqus_thread">
        <noscript>
          Please enable JavaScript to view the
          <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a>
        </noscript>
      </div>
    </div>

  



        </div>
        
          
  
  <div class="sidebar-toggle">
    <div class="sidebar-toggle-line-wrap">
      <span class="sidebar-toggle-line sidebar-toggle-line-first"></span>
      <span class="sidebar-toggle-line sidebar-toggle-line-middle"></span>
      <span class="sidebar-toggle-line sidebar-toggle-line-last"></span>
    </div>
  </div>

  <aside id="sidebar" class="sidebar">
    
    <div class="sidebar-inner">

      

      
        <ul class="sidebar-nav motion-element">
          <li class="sidebar-nav-toc sidebar-nav-active" data-target="post-toc-wrap">
            文章目录
          </li>
          <li class="sidebar-nav-overview" data-target="site-overview-wrap">
            站点概览
          </li>
        </ul>
      

      <section class="site-overview-wrap sidebar-panel">
        <div class="site-overview">
          <div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
            
              <p class="site-author-name" itemprop="name">matrix</p>
              <p class="site-description motion-element" itemprop="description"></p>
          </div>

          <nav class="site-state motion-element">

            
              <div class="site-state-item site-state-posts">
              
                <a href="/archives">
              
                  <span class="site-state-item-count">47</span>
                  <span class="site-state-item-name">日志</span>
                </a>
              </div>
            

            
              
              
              <div class="site-state-item site-state-categories">
                <a href="/categories/index.html">
                  <span class="site-state-item-count">18</span>
                  <span class="site-state-item-name">分类</span>
                </a>
              </div>
            

            
              
              
              <div class="site-state-item site-state-tags">
                
                  <span class="site-state-item-count">19</span>
                  <span class="site-state-item-name">标签</span>
                
              </div>
            

          </nav>

          

          

          
          

          
          

          

        </div>
      </section>

      
      <!--noindex-->
        <section class="post-toc-wrap motion-element sidebar-panel sidebar-panel-active">
          <div class="post-toc">

            
              
            

            
              <div class="post-toc-content"><ol class="nav"><li class="nav-item nav-level-3"><a class="nav-link" href="#为什么是DDD"><span class="nav-number">1.</span> <span class="nav-text">为什么是DDD</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#战略设计"><span class="nav-number">2.</span> <span class="nav-text">战略设计</span></a><ol class="nav-child"><li class="nav-item nav-level-5"><a class="nav-link" href="#领域"><span class="nav-number">2.0.1.</span> <span class="nav-text">领域</span></a></li><li class="nav-item nav-level-5"><a class="nav-link" href="#子域"><span class="nav-number">2.0.2.</span> <span class="nav-text">子域</span></a></li><li class="nav-item nav-level-5"><a class="nav-link" href="#核心域"><span class="nav-number">2.0.3.</span> <span class="nav-text">核心域</span></a></li><li class="nav-item nav-level-5"><a class="nav-link" href="#支撑域"><span class="nav-number">2.0.4.</span> <span class="nav-text">支撑域</span></a></li><li class="nav-item nav-level-5"><a class="nav-link" href="#通用子域"><span class="nav-number">2.0.5.</span> <span class="nav-text">通用子域</span></a></li><li class="nav-item nav-level-5"><a class="nav-link" href="#限界上下文"><span class="nav-number">2.0.6.</span> <span class="nav-text">限界上下文</span></a></li></ol></li></ol></li><li class="nav-item nav-level-3"><a class="nav-link" href="#战术设计"><span class="nav-number">3.</span> <span class="nav-text">战术设计</span></a><ol class="nav-child"><li class="nav-item nav-level-5"><a class="nav-link" href="#实体和值对象"><span class="nav-number">3.0.1.</span> <span class="nav-text">实体和值对象</span></a></li><li class="nav-item nav-level-5"><a class="nav-link" href="#聚合和聚合根"><span class="nav-number">3.0.2.</span> <span class="nav-text">聚合和聚合根</span></a></li><li class="nav-item nav-level-5"><a class="nav-link" href="#资源库"><span class="nav-number">3.0.3.</span> <span class="nav-text">资源库</span></a></li><li class="nav-item nav-level-5"><a class="nav-link" href="#领域事件"><span class="nav-number">3.0.4.</span> <span class="nav-text">领域事件</span></a></li><li class="nav-item nav-level-5"><a class="nav-link" href="#DDD分层"><span class="nav-number">3.0.5.</span> <span class="nav-text">DDD分层</span></a></li></ol></li></ol></li><li class="nav-item nav-level-3"><a class="nav-link" href="#架构-amp-模式"><span class="nav-number">4.</span> <span class="nav-text">架构&amp;模式</span></a><ol class="nav-child"><li class="nav-item nav-level-5"><a class="nav-link" href="#CQRS"><span class="nav-number">4.0.1.</span> <span class="nav-text">CQRS</span></a></li><li class="nav-item nav-level-5"><a class="nav-link" href="#事件溯源（Event-Sourcing）"><span class="nav-number">4.0.2.</span> <span class="nav-text">事件溯源（Event Sourcing）</span></a></li><li class="nav-item nav-level-5"><a class="nav-link" href="#六边形架构（Hexagonal-Architecture）"><span class="nav-number">4.0.3.</span> <span class="nav-text">六边形架构（Hexagonal Architecture）</span></a></li><li class="nav-item nav-level-5"><a class="nav-link" href="#整洁架构（The-Clean-Architecture）"><span class="nav-number">4.0.4.</span> <span class="nav-text">整洁架构（The Clean Architecture）</span></a></li></ol></li></ol></li><li class="nav-item nav-level-3"><a class="nav-link" href="#Reference"><span class="nav-number">5.</span> <span class="nav-text">Reference</span></a></li></ol></div>
            

          </div>
        </section>
      <!--/noindex-->
      

      

    </div>
  </aside>


        
      </div>
    </main>

    <footer id="footer" class="footer">
      <div class="footer-inner">
        <div class="copyright">&copy; <span itemprop="copyrightYear">2021</span>
  <span class="with-love">
    <i class="fa fa-user"></i>
  </span>
  <span class="author" itemprop="copyrightHolder">matrix</span>

  
</div>


  <div class="powered-by">由 <a class="theme-link" target="_blank" href="https://hexo.io">Hexo</a> 强力驱动</div>



  <span class="post-meta-divider">|</span>



  <div class="theme-info">主题 &mdash; <a class="theme-link" target="_blank" href="https://github.com/iissnan/hexo-theme-next">NexT.Pisces</a> v5.1.4</div>
<div class=BbeiAn-info">
  浙ICP备 -
  <a href="http://www.beian.miit.gov.cn">18040498号</a>
  </a>
</div>




        







        
      </div>
    </footer>

    
      <div class="back-to-top">
        <i class="fa fa-arrow-up"></i>
        
      </div>
    

    

  </div>

  

<script type="text/javascript">
  if (Object.prototype.toString.call(window.Promise) !== '[object Function]') {
    window.Promise = null;
  }
</script>









  












  
  
    <script type="text/javascript" src="/lib/jquery/index.js?v=2.1.3"></script>
  

  
  
    <script type="text/javascript" src="/lib/fastclick/lib/fastclick.min.js?v=1.0.6"></script>
  

  
  
    <script type="text/javascript" src="/lib/jquery_lazyload/jquery.lazyload.js?v=1.9.7"></script>
  

  
  
    <script type="text/javascript" src="/lib/velocity/velocity.min.js?v=1.2.1"></script>
  

  
  
    <script type="text/javascript" src="/lib/velocity/velocity.ui.min.js?v=1.2.1"></script>
  

  
  
    <script type="text/javascript" src="/lib/fancybox/source/jquery.fancybox.pack.js?v=2.1.5"></script>
  


  


  <script type="text/javascript" src="/js/src/utils.js?v=5.1.4"></script>

  <script type="text/javascript" src="/js/src/motion.js?v=5.1.4"></script>



  
  


  <script type="text/javascript" src="/js/src/affix.js?v=5.1.4"></script>

  <script type="text/javascript" src="/js/src/schemes/pisces.js?v=5.1.4"></script>



  
  <script type="text/javascript" src="/js/src/scrollspy.js?v=5.1.4"></script>
<script type="text/javascript" src="/js/src/post-details.js?v=5.1.4"></script>



  


  <script type="text/javascript" src="/js/src/bootstrap.js?v=5.1.4"></script>



  


  

    
      <script id="dsq-count-scr" src="https://luyun.disqus.com/count.js" async></script>
    

    
      <script type="text/javascript">
        var disqus_config = function () {
          this.page.url = 'http://yoursite.com/2020/12/05/领域驱动设计（DDD）笔记/';
          this.page.identifier = '2020/12/05/领域驱动设计（DDD）笔记/';
          this.page.title = '领域驱动设计（DDD）笔记';
        };
        var d = document, s = d.createElement('script');
        s.src = 'https://luyun.disqus.com/embed.js';
        s.setAttribute('data-timestamp', '' + +new Date());
        (d.head || d.body).appendChild(s);
      </script>
    

  




	





  














  





  

  

  

  
  

  

  

  

</body>
</html>
